home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
tracker.library
/
tracker.dok
< prev
next >
Wrap
Text File
|
1994-06-13
|
49KB
|
935 lines
tracker.library
--------------------------------------------------------
© Copyright 1993, 1994 by Arnold Schommer,
Alle Recht vorbehalten
--------------------------------------------------------
V6.8, Update zu V4.5 von FRANZ-PD_#283
--------------------------------------------------------
Inhaltsverzeichnis:
0. Warnung
1. Was ist / was kann die "tracker.library" ?
2. Wie benutzt man die "tracker.library" ?
3. Trackinglevels
4. Hard- und Softwarevoraussetzungen
5. Copyright, Garantie
6. Anschrift des Autors
7. Sonstiges
8. Danksagung
A. Die Funktionen der "tracker.library"
--------------------------------------------------------
0. Warnung
Die "tracker.library" ist alles andere als vollständig.
Ich gebe sogar zu, daß ich sie nicht einmal ausgiebig
auf Fehler untersucht habe.
Deshalb: Benutzung auf eigene Gefahr.
Ich selbst benutze die Library häufig und halte sie im
groben für fehlerfrei, aber es sind viele Funktionen
integriert, die ich praktisch nie benutze.
Leider sehe ich mich deshalb außer stande, zu
garantieren, daß durch die Library keine Schäden am
Computer oder den vorhandenen Datenbeständen entstehen.
Ich kann nur versprechen, nicht absichtlich ein
trojanisches Pferd in die Welt gesetzt zu haben.
1. Was ist / was kann die "tracker.library" ?
"tracker.library" ist eine sog. shared library, das ist
jene spezielle Form von Library, wie sie z.B. im LIBS:-
Verzeichnis anzufinden sind.
Sie ist als Tool für Programmierer gedacht. Wie oft
liest man in C Programmteile wie folgt:
VOID CloseUp();
{
COUNT i;
if(devopen) CloseDevice(ior);
if(ior) DeleteExtIO(ior);
if(port) DeletePort(port);
for(i=0;i<2;++i)
if(Sprite[i]!=-1) FreeSprite(Sprite[i]);
for(i=0;i<4;++i)
if(Raster[i])
FreeRaster(Raster,320,256);
if(Font) CloseFont(Font);
if(Window) CloseWindow(Window);
if(Screen) CloseScreen(Screen);
if(Buffer) FreeMem(Buffer,size);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase)
CloseLibrary(IntuitionBase);
exit(0);
}
Das ist nun eben der Fluch eines hochflexiblen
Multitasking-Betriebssystems, mögen Sie vielleicht
denken - Recht haben Sie. Und doch, es geht auch
einfacher:
VOID CloseUp();
{
if(TrackerBase) CloseLibrary(TrackerBase);
exit(0);
}
Ich schätze, hiermit ist anschaulich demonstriert,
was meine tracker.library bezweckt: Das sich nämlich
nicht mehr der Programmierer um die Freigabe aller
möglichen System-Ressourcen kümmern muß.
Man benutzt einfach statt der althergebrachten Routinen
jene der "tracker.library", um Systemressourcen
anzufordern. Die Freigabe kann dann entweder explizit
durch Aufruf eigener Freigabefunktionen oder implizit
durch "CloseLibrary(TrackerBase)" erfolgen.
Die Library ist für den Einsatz unter Kickstart 1.3
oder 2.0 geeignet.
2. Wie benutzt man die "tracker.library" ?
Nun - ich habe nicht Lust, Ihnen hier zu erklären, wie
man eine shared library auf dem Amiga benutzt. Wenn Sie
das noch nicht aus dem ff beherrschen, können Sie
vermutlich ohnehin nichts mit der "tracker.library"
anfangen.
Für alle, die ich noch nicht vergrault habe nun ein
paar (möglicherweise wichtige) Hinweise zu den Dateien:
- "tracker.library": die Library selbst. Am besten, Sie
kopieren sie nach "LIBS:".
- "tracker.h": ein C-Includefile mit Prototypes und ein
paar Definitionen. Da ich nur mit DICE arbeite, müssen
Sie das File eventuell an Ihren Compiler anpassen.
Sollte nach "libraries/" im Include- Verzeichnis
ihres C-Compilers kopiert werden (für DICE:
"DINCLUDE:AMIGA20/libraries" o.ä.).
- "tracker_lib.fd": ein BASIC-fd-File mit den
Deklarationen der Funktionen der "tracker.library".
Nicht, daß man unter BASIC programmieren sollte, aber
dieses Format ist wohl der Standard schlechthin,
wenn es darum geht, Libraries auch für beliebige
Programmiersprachen zur Verfügung zu stellen.
Obendrein ist es ganz gut lesbar, so daß man mit
etwas Erfahrung das Interface auch selbst entwickeln
kann.
- "tracker.lib": eine DICE-Link-Library mit Stubroutinen
für die Library. Wurde mit "fdtolib" erzeugt. Für
andere Compiler sollten sie versuchen, mit ähnlichen
Tools etwas entsprechendes zu erzeugen. Sollte für
DICE nach "DLIB:" kopiert werden.
- "tracker.i": ein Assembler-Includefile mit LVOs und
ein paar Definitionen. Sollte nach "libraries/" im
Include-Verzeichnis ihres Assemblers kopiert werden.
- "TRKMonitor": Dieses Programm protokolliert, wie die
tracker.library gerade benutzt wird. CLI- und WB-
fähig, benötigt allerdings Dos V36+.
- "Demos": Dieses Unterverzeichnis enthält einige Demo-
Progrämmchen für die tracker.library. Diese Demos sind
nur unter dos.library V36+ lauffähig (Vorsicht: kein
Test !), da sie DOS.VPrintf() benutzen.
Hier kann man sich exemplarisch ansehen, wie die
Library benutzt wird. Eigentlich habe ich mit diesen
Progrämmchen in der Anfangsphase des Projekts zu
testen versucht, wie fehlerfrei die Routinen im
Hinblick auf Verschachtelung mehrerer Aufrufe sind.
Wollen sie sie selbst assemblieren, sind sie eventuell
auf meine eigenen Header-Files für die LVO's
angewiesen. Kopieren sie dafür "exec_LVO.i",
"dos_LVO.i" und "intuition_LVO.i" in das Include-
Verzeichnis ihres Assemblers, allerdings als
"exec/LVO.i", "dos/LVO.i" und "intuition/LVO.i".
Aus der Arbeitsweise der Library ergeben sich gewisse
Einschränkungen. Da die verschiedenen Benutzer über ihre
Task-Addressen identifiziert werden, ist es z.B. nicht
möglich, Interrupts einfach die TrackerBase zu übergeben
oder die Library für Routinen zu nutzen, die keinem oder
mehreren Tasks angehören (z.B. Patches für Libraries
oder Libraries selbst).
Diese Arbeitsweise ist übrigens nicht eine willkürliche
Einschränkung meinerseits, sondern ergibt sich aus der
Notwendigkeit, beim CloseLibrary(TrackerBase)
festzustellen, welche Objekte freizugegben sind. Die
Vergabe von User-ID's wäre allein wegen des dadurch
nötigen zusätzlichen Parameters nicht vertretbar.
3. Trackinglevels
Jedes unter tracker.library allozierte Objekt ist einem
TrackingLevel zugeordnet. So kann man selber Gruppen
bilden, die auf einmal freigegeben werden können, ohne
die Library schließen zu müssen. Beim Öffnen wird der
TrackingLevel auf 1 initialisiert, und bis auf die
folgenden Funktionen wird er nicht verändert.
Große Ausnahme: GetWBMsg() speichert die Startup-Message
unter TrackingLevel #0, um sie aus allem herauszuhalten.
Der TrackingLevel ist (z.Zt., aber ich habe nicht vor,
es zu ändern) als UWORD definiert.
4. Hard- und Softwarevoraussetzungen
Die "tracker.library" wurde auf einem A2000B mit A2630
(4MB) unter Kickstart 2.0 entwickelt. Soweit ich
beurteilen kann, sollte sie auf allen Amigas (zumindest
ab Kickstart 1.3) laufen.
5. Copyright, Garantie
Die "tracker.library" ist Freeware. Sie darf beliebig
oft kopiert und weitergegeben werden. Ausnahme:
Verboten ist die Weitergabe (auch zusammen mit
anderen Programmen), wenn dafür Kosten von mehr als DM
5,- (Porto nicht inbegriffen) berechnet werden.
Leider sehe ich mich - rein technisch - außer stande,
zu garantieren, daß durch mein Programm keine Schäden
am Computer oder den vorhandenen Datenbeständen
entstehen. Ich kann nur versprechen, nicht absichtlich
ein trojanisches Pferd in die Welt gesetzt zu haben.
6. Anschrift des Autors
Arnold Schommer
Erikaweg 16
40670 Meerbusch-Strümp
7. Sonstiges
Ich wäre dankbar für BugReports, und zwar mit möglichst
genauer Beschreibung,
a) auf welchem Amiga und mit welchen Erweiterungen
der Fehler auftrat
b) wie der Fehler provoziert werden kann
c) wie sich der Fehler äußert
Ich werde versuchen, den Fehler zu beheben, aber wenn
er auf meinem A2000B mit (oder ohne) A2630 nicht
auftritt, kann ich kaum etwas tun.
Für Erweiterungsvorschläge bin ich nicht unbedingt zu
erwärmen. Schließlich habe ich noch nicht einmal alle
Funktionen realisiert, die ich ursprünglich einmal
geplant hatte.
Sehr dankbar wäre ich dagegen, falls mir jemand
zuverlässige Informationen geben könnte, wie man eben
doch die Workbench-StartupMessage abfragen kann,
nachdem bereits Libraries geöffnet wurden. Das ist laut
Commodore verboten (und nach eigenen Versuchen auch
schlicht nicht möglich - WaitPort() versagt scheinbar),
aber ich fände es doch ganz passend, wenn das ginge.
8. Danksagung
Vielen Dank an die Entwickler der "arp.library" - für
die großartige Idee, Systemressourcen via
CloseLibrary() wieder freizugeben.
--------------------------------------------------------
A. Die Funktionen der "tracker.library"
Im Prinzip kann man die Dokumentation nachlesen, wo man
die Dokumentation für Systemroutinen eben nachliest.
Ich habe mich bei der Entwicklung v.a. an das "AMIGA
intern" von Data Becker (das ich aber ausdrücklich
NICHT weiterempfehlen kann) und das "RKRM Includes &
Autodocs" von Addison-Wesley gehalten.
Die Funktionen der "tracker.library" unterscheiden sich
wie folgt von den Originalen:
- Sie haben alle den Namensvorsatz "TRK_". Dieser dient
v.a. zur Unterscheidung von den Originalen.
(Dies trifft nicht auf die Library-spezifischen
Funktionen zur Verwaltung der TrackingLevels zu).
- Bei einigen Freigabefunktionen können Parameter
wegfallen (z.B. die Länge des Speicherbereiches bei
"TRK_FreeMem()")
- Selbstverständlich erwarten die Funktionen in A6 die
Adresse der "tracker.library", nicht die der
"exec.library" etc.
Es folgt eine kurze Dokumentation der Funktionen. Die
Bemerkung "kompatibel" bzw. "abwärts-kompatibel" bezieht
sich AUSSCHLIESSSLICH auf Funktion und Parameter, es
ist nämlich unbedingt nötig, Ressourcen, die über die
"tracker.library" angefordert wurden, auch über diese
freizugeben (und sei es implizit per CloseLibrary())
und umgekehrt Ressourcen, die über andere Libraries
angefordert wurden, auch über die jewilige Library
freizugeben.
Werden Parameter und/oder Ergebnis nicht erwähnt, so
gilt hier dasselbe wie für die genannte Original-
Funktion.
Vorweg eine Liste von Funktionen, die sich erheblich von
ihren Originalen unterscheiden:
TRK_Examine, TRK_ExamineFH, TRK_ExNext, TRK_Info,
TRK_GetPrefs, TRK_GetDefPrefs, TRK_SetPrefs,
TRK_AslRequest, TRK_FreeGadgets, TRK_PutDiskObject,
TRK_PutDefDiskObject
--------------------------------------------------------
TRK_OpenStdLibrary: Standard-Library öffnen
Parameter: d0 = Versionsnummer
d1 = Schlüssel-Nummer (siehe tracker.i/.h)
Ergebnis: Zeiger auf die Library / 0 für Fehler
--------------------------------------------------------
TRK_OpenLibrary: Library öffnen
Original-Funktion: Exec.OpenLibrary
--------------------------------------------------------
TRK_CloseLibrary: Library schließen
Original-Funktion: Exec.CloseLibrary
Freigabefunktion zu TRK_OpenLibrary und
TRK_OpenStdLibrary
--------------------------------------------------------
TRK_AllocMem: Speicher allozieren
Originalfunktion: Exec.AllocMem
(ersetzt genauso Exec.AllocVec)
--------------------------------------------------------
TRK_FreeMem: Speicher freigeben
Originalfunktion: Exec.FreeMem
(ersetzt genauso Exec.FreeVec)
Freigabefunktion zu TRK_AllocMem
Parameter D0 = Größe des Speicherbereiches entfällt
--------------------------------------------------------
TRK_OpenDevice: Device öffnen
Originalfunktion: Exec.OpenDevice
--------------------------------------------------------
TRK_CloseDevice: Device schließen
Originalfunktion: Exec.CloseDevice
Freigabefunktion zu TRK_OpenDevice
--------------------------------------------------------
TRK_GetDevice: IORequest und ReplyPort allozieren und
Device dazu öffnen
Parameter: a0 = Zeiger auf den Device-Namen
d0 = Unit-Nummer
d1 = Flags
d2 = Größe des IORequest in Bytes (WORD)
Ergebnis: Die Adresse des IORequest bzw. 0 für Fehler
diese Routine ersetzt in etwa [zuzüglich Fehler-Checks]:
struct IORequest *TRK_GetDevice(UBYTE *devname,
ULONG unit, ULONG flags, ULONG iosize)
{ struct IORequest *io;
io=CreateExtIO(CreatePort(0,0),iosize);
OpenDevice(devname,unit,io,flags);
return(io);
}
--------------------------------------------------------
TRK_CreatePort: MessagePort einrichten
Originalfunktion: Exec.CreateMsgPort
läuft auch unter 1.3
Parameter: a0 = Zeiger auf den gewünschten
MessagePort-Namen
d0 = Priorität
Ergebnis: Adresse des Ports / 0 für Fehler
--------------------------------------------------------
TRK_DeletePort: MessagePort freigeben
Originalfunktion: Exec.DeleteMsgPort
läuft auch unter 1.3
Freigabefunktion zu TRK_CreatePort
Parameter: a0 = Zeiger auf den Port
kein Ergebnis
--------------------------------------------------------
TRK_CreateExtIO: IORequest einrichten
Originalfunktion: Exec.CreateIORequest
läuft auch unter 1.3
Parameter: a0 = Zeiger auf den IOReplyPort
d0 = Größe des IORequest in Bytes
(Achtung: Angabe in WORD!!)
Ergebnis: Adresse des erzeugten IORequest / 0 für Fehler
Wird kein ReplyPort übergeben (a0==0), so wird ein
eigener per CreatePort(0,0) angelegt. Dieser wird bei
der Freigabe des IORequest ebenfalls freigegeben, darf
aber NICHT per TRK_DeletePort() freigegeben werden !
--------------------------------------------------------
TRK_DeleteExtIO: IORequest freigeben
Originalfunktion: Exec.DeleteIORequest
läuft auch unter 1.3
Freigabefunktion zu TRK_CreateExtIO
Parameter: a0 = Zeiger auf den Port
kein Ergebnis
--------------------------------------------------------
TRK_GetWBMsg: Workbench-Startup-Message lesen und zur
Beantwortung sichern
keine Parameter
Ergebnis: Adresse der StartupMessage-Struktur / 0 für
CLI-Start (oder Fehler)
Diese Funktion hat einige Besonderheiten:
* Die Startup-Message wird grundsätzlich im eigens
reservierten TrackingLevel 0 registriert. Damit
verhindert die Library, daß sie vorzeitig durch
FreeTrackingLevels o.ä. freigegeben wird.
* Wer nicht gerade in Assembler programmiert, sollte
sicher gehen, daß sein Startup-Code die Message nicht
abfängt (weder vorher noch nachher).
* es gibt keine entsprechende Freigabe-Funktion (da nach
dem ReplyMsg() das Programm aus dem Speicher entfernt
wird).
* Bei der "Freigabe" wird Exec.Forbid() aufgerufen, wie
es sein muß. Der Benutzer sollte also dafür sorgen,
daß CloseLibrary(TrackerBase) möglichst spät erfolgt.
* Diese Funktion crasht unter Kickstart 1.3, unter 2.0
läuft sie problemlos. Ohne über die Gründe zu
spekulieren, habe ich darauf verzichtet, sie mit einem
Test auf Kickstart 2+ zu sichern, da daß wieder
Probleme erzeugen würde, zu erkennen, ob das Programm
nun unter 1.3 oder unter 2.0 & CLI gestartet wurde.
Wer unter 1.3 lauffähige Programme schreiben will, muß
ja ohnehin ohne sie auskommen (können).
* Ich bin mir nicht sicher, ob es überhaupt erlaubt ist,
die Startup-Message abzufragen, nachdem bereits
Libraries geöffnet wurden. Wer Wert darauf legt, nicht
von Commodore verflucht zu werden, sollte vielleicht
besser auf diese Funktion verzichten.
--------------------------------------------------------
TRK_AllocSignal: Signal allozieren
Originalfunktion: Exec.AllocSignal
--------------------------------------------------------
TRK_FreeSignal: Signal freigeben
Originalfunktion: Exec.FreeSignal
Freigabefunktion zu TRK_AllocSignal
--------------------------------------------------------
TRK_AddIntServer: IRQ-Server einfügen
Originalfunktion: Exec.AddIntServer
--------------------------------------------------------
TRK_RemIntServer: IRQ-Server ausklinken
Originalfunktion: Exec.RemIntServer
Parameter d0 = Interrupt-Nummer entfällt
Freigabefunktion zu TRK_AddIntServer
--------------------------------------------------------
TRK_Open: Datei öffnen
Originalfunktion: Dos.Open
--------------------------------------------------------
TRK_OpenFromLock: Datei via Lock öffnen
Originalfunktion: Dos.OpenFromLock
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_Close-Routine: Datei schließen
Originalfunktion: Dos.Close
Freigabefunktion zu TRK_Open und TRK_OpenFromLock
--------------------------------------------------------
TRK_Lock: Lock einrichten
Originalfunktion: Dos.Lock
--------------------------------------------------------
TRK_DupLock: Lock duplizieren
Originalfunktion: Dos.DupLock
--------------------------------------------------------
TRK_DupLockFromFH: Lock von FileHandle duplizieren
Originalfunktion: Dos.DupLockFromFH
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_UnLock: Lock freigeben
Originalfunktion: Dos.UnLock
Freigabefunktion zu TRK_Lock, TRK_DupLock und
TRK_DupLockFromFH
--------------------------------------------------------
TRK_Examine: FIB allozieren und Lock untersuchen
Originalfunktion: Dos.Examine
Parameter D2 = Adresse des FIB entfällt
Das untersuchte Lock wird bei Freigabe des FIB ebenfalls
freigegeben !
--------------------------------------------------------
TRK_ExamineFH: FIB allozieren und FileHandle untersuchen
Originalfunktion: Dos.ExamineFH
Parameter D2 = Adresse des FIB entfällt
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_ExamineName: Lock zu Dateinamen Namen einrichten,
FIB allozieren und Lock untersuchen
Parameter: D1 = Zeiger auf den Dateinamen
Ergebnis: Zeiger auf den FIB / 0 für Fehler
--------------------------------------------------------
TRK_ExNext: nächsten Directory-Eintrag untersuchen
Originalfunktion: Dos.ExNext
Parameter D1 = Lock-BPTR entfällt
--------------------------------------------------------
TRK_FreeFIB: FIB und assoziiertes Lock freigeben
Parameter: d1 = Zeiger auf den FIB
kein Ergebnis
Freigabefunktion zu TRK_Examine, TRK_ExamineFH,
TRK_ExamineName und TRK_ExNext
--------------------------------------------------------
TRK_Info: InfoData-Struktur allozieren und anhand eines
Locks füllen
Originalfunktion: Dos.Info
Parameter D2 = Adresse der InfoData-Struktur entfällt
Ergebnis: Zeiger auf die InfoData-Struktur /
0 für Fehler
Freigabefunktion für die erhaltene InfoData-Struktur ist
TRK_FreeMem
--------------------------------------------------------
TRK_InfoName: InfoData-Struktur allozieren und anhand
eines Dateinamens füllen lassen
Parameter: d1 = Zeiger auf den Dateinamen
Ergebnis: Zeiger auf die InfoData-Struktur /
0 für Fehler
Freigabefunktion für die erhaltene InfoData-Struktur ist
TRK_FreeMem
--------------------------------------------------------
TRK_LoadSeg: Segment laden
Originalfunktion: Dos.LoadSeg
--------------------------------------------------------
TRK_NewLoadSeg: Segment laden
Originalfunktion: Dos.NewLoadSeg
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_UnLoadSeg: Segment freigeben
Originalfunktion: Dos.UnLoadSeg
Freigabefunktion zu TRK_LoadSeg und TRK_NewLoadSeg
--------------------------------------------------------
TRK_AllocDosObject: DosObject allozieren
Originalfunktion: Dos.AllocDosObject
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_FreeDosObject: DosObject freigeben
Originalfunktion: Dos.FreeDosObject
Freigabefunktion zu TRK_AllocDosObject
Parameter D1 = Typ-Kennung entfällt
Bemerkung: Nach einem früheren Dok-File wurde der
Parameter D2 (Zeiger auf das Objekt) in D1 erwartet.
Dies war falsch.
--------------------------------------------------------
TRK_StartNotify: Notification starten
Originalfunktion: Dos.StartNotify
unter OS <2.0 wird 0 zurückgegeben
--------------------------------------------------------
TRK_EndNotify: Notification beenden
Originalfunktion: Dos.EndNotify
Freigabefunktion zu TRK_StartNotify
--------------------------------------------------------
TRK_ReadArgs: Parameter-Parsing
Originalfunktion: Dos.ReadArgs
--------------------------------------------------------
TRK_FreeArgs: RDArgs-Struktur freigeben
Originalfunktion: Dos.FreeArgs
Freigabefunktion zu TRK_ReadArgs
--------------------------------------------------------
TRK_OpenFont: RomFont öffnen
Originalfunktion: Graphics.OpenFont
--------------------------------------------------------
TRK_OpenDiskFont: DiskFont öffnen
Originalfunktion: Diskfont.OpenDiskFont
--------------------------------------------------------
TRK_CloseFont: Font schließen
Originalfunktion: Graphics.CloseFont
Freigabefunktion zu TRK_OpenFont und TRK_OpenDiskFont
--------------------------------------------------------
TRK_AllocRaster: Raster allozieren
Originalfunktion: Graphics.AllocRaster
--------------------------------------------------------
TRK_FreeRaster: Raster freigeben
Originalfunktion: Graphics.FreeRaster
Freigabefunktion zu TRK_AllocRaster
Parameter D0 und D1 (Größe des Rasters) entfallen
--------------------------------------------------------
TRK_GetSprite: Sprite allozieren
Originalfunktion: Graphics.GetSprite
--------------------------------------------------------
TRK_FreeSprite: Sprite freigeben
Originalfunktion: Graphics.FreeSprite
Freigabefunktion zu TRK_GetSprite
--------------------------------------------------------
TRK_OpenWindow: Window öffnen
Originalfunktion: Intuition.OpenWindow
--------------------------------------------------------
TRK_CloseWindow: Window schließen
Originalfunktion: Intuition.CloseWindow
Freigabefunktion zu TRK_OpenWindow,
TRK_OpenWindowTagList, TRK_OpenWindowOnPubScreen
und TRK_OpenWindowOnPSTagList
Diese Routine enthält auch ein CloseWindowSafely !
ACHTUNG:
Wurde für dieses Window mit TRK_SetMenuStrip ein Menu
eingerichtet, so muß dieses vor Aufruf von
TRK_CloseWindow 'per Hand' mit TRK_ClearMenuStrip
abgemeldet werden ! Sonst entsteht beim Versuch der
Library, beim schließen ihrer selbst das Menu
auszuklinken, ein Guru.
Dagegen ist es absolut ungefährlich, ein Window mit Menu
durch CloseLibrary schließen zu lassen.
--------------------------------------------------------
TRK_OpenWindowTagList: Window öffnen
Originalfunktion: Intuition.OpenWindowTagList
--------------------------------------------------------
TRK_OpenWindowOnPubScreen: Window auf PubScreen öffnen
Parameter: a0 = Zeiger auf die beschreibende
NewWindow-Struktur
a2 = Zeiger auf den PubScreen-Namen
Ergebnis: Zeiger auf das erzeugte Window / 0 für Fehler
--------------------------------------------------------
TRK_OpenWindowOnPSTagList: Window auf PubScreen öffnen
Parameter: a0 = Zeiger auf die beschreibende
NewWindow-Struktur
a1 = Zeiger auf das Tag-Array
a2 = Zeiger auf den PubScreen-Namen
Ergebnis: Zeiger auf das erzeugte Window / 0 für Fehler
--------------------------------------------------------
TRK_OpenScreen: Screen öffnen
Originalfunktion: Intuition.OpenScreen
--------------------------------------------------------
TRK_CloseScreen: Screen schließen
Originalfunktion: Intuition.CloseScreen
Freigabefunktion zu TRK_OpenScreen und
TRK_OpenScreenTagList
--------------------------------------------------------
TRK_OpenScreenTagList: Screen öffnen
Originalfunktion: Intuition.OpenScreenTagList
--------------------------------------------------------
TRK_SetMenuStrip: Menu in Window einbinden
Originalfunktion: Intuition.SetMenuStrip
Wurde per tracker.library bereits ein Menu auf diesem
Window installiert, so wird die Eintragung dafür
überschrieben. Es besteht also nicht die Notwendigkeit,
zwischen mehreren Aufrufen dieser Funktion
TRK_ClearMenuStrip zu benutzen, um unsinnige Aktionen
beim Aufräumen zu unterbinden.
--------------------------------------------------------
TRK_ClearMenuStrip: Menu von Window loslösen
Originalfunktion: Intuition.ClearMenuStrip
Freigabefunktion zu TRK_SetMenuStrip
--------------------------------------------------------
TRK_ResetMenuStrip: Menu reinstallieren (zu
Intuition.ResetMenuStrip abwärts-kompatibel)
Parameter: a0 = Zeiger auf die Window-Struktur
a1 = Zeiger auf die Menu-Struktur
Wurde per tracker.library bereits ein Menu auf diesem
Window installiert, so wird die Eintragung dafür
überschrieben. Es besteht also nicht die Notwendigkeit,
zwischen mehreren Aufrufen dieser Funktion
TRK_ClearMenuStrip zu benutzen, um unsinnige Aktionen
beim Aufräumen zu unterbinden.
--------------------------------------------------------
TRK_LockPubScreen: Zugriff auf PubScreen sichern
Originalfunktion: Intuition.LockPubScreen
--------------------------------------------------------
TRK_UnlockPubScreen: PubScreen freigeben
Originalfunktion: Intuition.UnlockPubScreen
Freigabefunktion zu TRK_LockPubScreen
Parameter a0 = Zeiger auf den PubScreen-Namen entfällt
--------------------------------------------------------
TRK_GetPrefs: Preferences-Struktur allozieren und
aktuelle Preferences einlesen
Originalfunktion: Intuition.GetPrefs
Parameter a0 = Zeiger auf Puffer entfällt
Ergebnis: Zeiger auf die Preferences-Struktur /
0 für Fehler
--------------------------------------------------------
TRK_GetDefPrefs: Preferences-Struktur allozieren und
Standard-Preferences einlesen
Originalfunktion: Intuition.GetDefPrefs
Parameter a0 = Zeiger auf Puffer entfällt
Ergebnis: Zeiger auf die Preferences-Struktur /
0 für Fehler
--------------------------------------------------------
TRK_SetPrefs: neue Preferences-Werte setzen
Original-Funktion: Intuition.SetPrefs
(optional) Freigabefunktion zu
TRK_GetPrefs / TRK_GetDefPrefs
Parameter d0 = Größe der Preferences entfällt
zusätzlicher Parameter (BOOL) d2 = Flag:
Preferences-Struktur freigeben ?
Ergebnis: Zeiger auf die Preferences-Struktur /
0, falls freigegeben
--------------------------------------------------------
TRK_FreePrefs: Preferences-Struktur freigeben
Freigabefunktion zu TRK_GetPrefs / TRK_GetDefPrefs
Parameter: a0 = Zeiger auf die Preferences-Struktur
--------------------------------------------------------
TRK_Request: Requester aktivieren
Originalfunktion: Intuition.Request
--------------------------------------------------------
TRK_EndRequest: Requester beenden
Originalfunktion: Intuition.EndRequest
Freigabefunktion zu TRK_Request
Parameter a1 = Zeiger auf das Window entfällt
--------------------------------------------------------
TRK_SetDMRequest: Double-Menu-Requester installieren
Originalfunktion: Intuition.SetDMRequest
Wurde per tracker.library bereits ein DMRequest auf
diesem Window installiert, so wird die Eintragung dafür
überschrieben. Es besteht also nicht die Notwendigkeit,
zwischen mehreren Aufrufen dieser Funktion
TRK_ClearDMRequest zu benutzen, um unsinnige Aktionen
beim Aufräumen zu unterbinden.
--------------------------------------------------------
TRK_ClearDMRequest: DMRequest löschen
Originalfunktion: Intuition.SetDMRequest
Freigabefunktion zu TRK_SetDMRequest
--------------------------------------------------------
TRK_BuildSysRequest: SystemRequester öffnen
Originalfunktion: Intuition.BuildSysRequest
--------------------------------------------------------
TRK_FreeSysRequest: SystemRequester schließen
Originalfunktion: Intuition.FreeSysRequest
Freigabefunktion zu TRK_BuildSysRequest
--------------------------------------------------------
TRK_GetScreenDrawInfo: DrawInfo-Struktur zu einem Screen
suchen
Originalfunktion: Intuition.GetScreenDrawInfo
Warnung: Diese Routine verhindert nicht ein Schließen
des Screens ! (zumindest bis V37)
--------------------------------------------------------
TRK_FreeScreenDrawInfo: DrawInfo-Struktur zu einem
Screen freigeben
Originalfunktion: Intuition.FreeScreenDrawInfo
Freigabefunktion zu TRK_GetScreenDrawInfo und
TRK_GetScDIPubScreen
Parameter: a0 = Zeiger auf den Screen entfällt
--------------------------------------------------------
TRK_GetScDIPubScreen: PubScreen locken und
DrawInfo-Struktur dazu suchen
Parameter: a0 = Zeiger auf den PubScreen-Namen
Ergebnis: Zeiger auf die zugehörige DrawInfo-Struktur /
0 für Fehler
diese Routine ersetzt in etwa
TRK_GetScreenDrawInfo(TRK_LockPubScreen(a0))
--------------------------------------------------------
TRK_AllocFileRequest: ASL-FileRequester allozieren
Originalfunktion: ASL.AllocFileRequest
--------------------------------------------------------
TRK_AllocAslRequest: ASL-Requester allozieren
Originalfunktion: ASL.AllocAslRequest
--------------------------------------------------------
TRK_FreeAslRequest: Asl-Requester freigeben
Originalfunktion: Asl.FreeAslRequest
Freigabefunktion zu TRK_AllocFileRequest,
TRK_AllocAslRequest und TRK_AslRequest
--------------------------------------------------------
TRK_AslRequest: ASL-Requester allozieren und benutzen
Parameter: d0 = Typ des Requesters
a1 = Zeiger auf eine beschreibendes Tag-Array
Ergebnis: Zeiger auf erhaltene AslRequest-Struktur /
0 für Fehler.
Das Ergebnis von Asl.AslRequest geht verloren !
--------------------------------------------------------
TRK_GetVIPubScreenA: Zugriff auf (GadTools-interne)
VisualInfo-Struktur zu einem namentlich bekannten
PubScreen sichern
Parameter: a0 = Zeiger auf den Namen des PubScreen, zu
dem die VisualInfo-Struktur gewünscht wird
a1 = Zeiger auf eine spezifizierende
Tag-Liste
Ergebnis: Zeiger auf erhaltene VisualInfo-Struktur /
0 für Fehler
falls d0!=0, enthält ferner a1 die Adresse des
gelockten PubScreens.
TRK_GetVIPubScreenA(name, tlist) ersetzt
TRK_GetVisualInfoA(TRK_LockPubScreen(name), tlist)
(plus Safety-Checks)
--------------------------------------------------------
TRK_GetVisualInfoA: Zugriff auf (GadTools-interne)
VisualInfo-Struktur sichern
Originalfunktion: GadTools.GetVisualInfoA
--------------------------------------------------------
TRK_FreeVisualInfo: VisualInfo-Struktur freigeben
Originalfunktion: GadTools.FreeVisualInfo
Freigabefunktion zu TRK_GetVIPubScreenA und
TRK_GetVisualInfoA
--------------------------------------------------------
TRK_CreateContext: "Context" für GadTools-Gadgets
erzeugen
Originalfunktion: GadTools.CreateContext
Da mir nach RKRM nicht 100%ig klar ist, ob das Ergebnis
und das, was in *a0 geschrieben wird, dasselbe sind,
behandele ich nicht wie ursprünglich geplant a0==NULL
selber so, daß ich dann tnd_Data dafür benutze.
--------------------------------------------------------
TRK_FreeGadgets: GadTools-Gadgets freigeben
Originalfunktion: GadTools.FreeGadgets (allerdings mit
anderem Parameter !
Freigabefunktion zu TRK_CreateContext
Parameter: a0 = die Adresse der Zeigervariable, die
bereits TRK_CreateContext() übergeben wurde, NICHT
wie bei GadTools.FreeGadgets ihr Inhalt !
--------------------------------------------------------
TRK_CreateMenusA: Menu-"Baum" erzeugen
Originalfunktion: GadTools.CreateMenusA
--------------------------------------------------------
TRK_FreeMenus: Menu-"Baum" freigeben
Originalfunktion: GadTools.FreeMenus
Freigabefunktion zu TRK_CreateMenusA
--------------------------------------------------------
SetTrackingLevel: TrackingLevel wechseln
Parameter: d0.w = neuer TrackingLevel
Ergebnis: der bisher gültige TrackingLevel
--------------------------------------------------------
GetTrackingLevel: aktuellen TrackingLevel auslesen
Ergebnis: der gültige TrackingLevel
--------------------------------------------------------
FreeUpperTrackingLevels: alle TrackNodes, die unter dem
aktuellen TrackingLevel oder drüber erzeugt
wurden, löschen
--------------------------------------------------------
FreeTrackingLevels: alle TrackNodes, die unter einem
bestimmten TrackingLevel oder darüber erstellt
wurden, freigeben
Parameter: d0.w = der minimale freizugebende
TrackingLevel
--------------------------------------------------------
FreeCurrentTrackingLevel: alle TrackNodes, die unter dem
aktuellen TrackingLevel erzeugt wurden, löschen
--------------------------------------------------------
FreeTrackingLevel: alle TrackNodes, die unter einem
bestimmten TrackingLevel erstellt wurden,
freigeben
Parameter: d0.w = der freizugebende TrackingLevel
--------------------------------------------------------
PushTrackingLevel: aktuellen TrackingLevel um 1 erhöhen
Ergebnis: der neu gesetzte aktuelle TrackingLevel
War der TrackingLevel bereits -1.w, so wird der Guru
#AN_Tracker_Level_overflow (Recovery !) erzeugt und der
TrackingLevel nicht verändert.
--------------------------------------------------------
PopTrackingLevels: alle TrackNodes, die unter dem
aktuellen TrackingLevel der drüber erzeugt wurden,
löschen und den TrackingLevel um 1 erniedrigen
Ergebnis: der neue TrackingLevel
war der aktuelle TrackingLevel bereits 1, so wird der
Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
und der TrackingLevel nicht verändert.
--------------------------------------------------------
PopTrackingLevel: alle TrackNodes, die unter dem
aktuellen TrackingLevel erzeugt wurden, löschen
und den TrackingLevel um 1 erniedrigen
Ergebnis: der neue TrackingLevel
War der aktuelle TrackingLevel bereits 1, so wird der
Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
und der TrackingLevel nicht verändert.
--------------------------------------------------------
DecTrackingLevel: aktuellen TrackingLevel um 1
erniedrigen
Ergebnis: der neu gesetzte aktuelle TrackingLevel
War der aktuelle TrackingLevel bereits 1, so wird der
Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
und der TrackingLevel nicht verändert.
--------------------------------------------------------
HighestTrackingLevel: die Nummer des höchsten benutzten
TrackingLevel ermitteln
Ergebnis: die Nummer des höchsten benutzten
TrackingLevel
Ein Ergebnis 0 bedeutet, daß (außer einer eventuellen
Startup-Message) keine TrackNodes existieren !
--------------------------------------------------------
NewTrackingLevel: TrackingLevel auf neuen, garantiert
noch nicht benutzten Wert setzen
Ergebnis: der neu gesetzte aktuelle TrackingLevel
wird kein freier TrackingLevel gefunden, so wird ein
Alert erzeugt und 0 zurückgegeben, der TrackingLevel
jedoch nicht verändert.
--------------------------------------------------------
TRK_AllocIFF: IFFHandle allozieren
Originalfunktion: IFFParse.AllocIFF
--------------------------------------------------------
TRK_FreeIFF: IFFHandle freigeben
Originalfunktion: IFFParse.FreeIFF
Freigabefunktion zu TRK_AllocIFF
--------------------------------------------------------
TRK_OpenIFF: IFFHandle öffnen
Originalfunktion: IFFParse.OpenIFF
Konnte die IFFParse-Library (beim Laden der Tracker-
Library) nicht geöffnet werden, so wird IFFERR_NOTIFF
returniert. Das kann aber eigentlich nicht passieren, da
man ohne IFFParse-Library garnicht an den IFFHandle
kommt.
--------------------------------------------------------
TRK_CloseIFF: IFFHandle schließen
Originalfunktion: IFFParse.CloseIFF
Freigabefunktion zu TRK_OpenIFF
--------------------------------------------------------
TRK_PushChunk: neuen ContextNode auf den Contextstack
schieben
Originalfunktion: IFFParse.PushChunk
--------------------------------------------------------
TRK_PopChunk: ContextNode vom Contextstack löschen
Originalfunktion: IFFParse.PopChunk
Freigabefunktion zu TRK_PushChunk
--------------------------------------------------------
TRK_OpenClipboard: Clipboard-Device für Benutzung durch
IFFParse.library öffnen
Originalfunktion: IFFParse.OpenClipboard
--------------------------------------------------------
TRK_CloseClipboard: Clipboard-Device schließen
Originalfunktion: IFFParse.CloseClipboard
Freigabefunktion zu TRK_OpenClipboard
--------------------------------------------------------
TRK_AllocLocalItem: LocalContextItem allozieren
Originalfunktion: IFFParse.AllocLocalItem
--------------------------------------------------------
TRK_FreeLocalItem: LocalContextItem freigeben
Originalfunktion: IFFParse.FreeLocalItem
Freigabefunktion zu TRK_AllocLocalItem
--------------------------------------------------------
TRK_CreateIFFasDOS: IFFHandle allozieren, Datei dazu
öffnen, InitIFFasDOS und OpenIFF
(alles fehlergesichert)
Parameter: a0 = Zeiger auf den Dateinamen
d0 = Modus: IFFF_READ oder IFFF_WRITE
d1 = Modus, mit dem die Datei geöffnet werden
soll (MODE_...)
Ergebnis: erhaltener IFFHandle-Zeiger / 0 für Fehler
--------------------------------------------------------
TRK_DeleteDOSIFF: IFFHandle schließen, Datei dazu
schließen und IFFHandle freigeben
Parameter: a0 = IFFHandle-Zeiger
Freigabefunktion zu TRK_CreateIFFasDOS
--------------------------------------------------------
TRK_CreateIFFasClip: IFFHandle allozieren, Clipboard-
Device dazu öffnen, InitIFFasClip und OpenIFF
(alles fehlergesichert)
Parameter: d0 = Modus: IFFF_READ oder IFFF_WRITE
d1 = Clipboard-Unit-Nummer
Ergebnis: erhaltener IFFHandle-Zeiger / 0 für Fehler
--------------------------------------------------------
TRK_DeleteClipIFF: IFFHandle schließen, Clipboardhandle
dazu schließen und IFFHandle freigeben
Parameter: a0 = IFFHandle-Zeiger
Freigabefunktion zu TRK_CreateIFFasClip
--------------------------------------------------------
TRK_GetDiskObject: Icon-Daten einlesen
Originalfunktion: Icon.GetDiskObject
--------------------------------------------------------
TRK_GetDefDiskObject: Standard-Icon-Daten einlesen
Originalfunktion: Icon.GetDefDiskObject
Unter icon.library < v36 wird 0 zurückgegeben.
--------------------------------------------------------
TRK_GetDiskObjectNew: Icon-Daten einlesen
Originalfunktion: Icon.GetDiskObjectNew
Unter icon.library < v36 wird 0 zurückgegeben.
--------------------------------------------------------
TRK_PutDiskObject: Icon-Daten schreiben und danach
freigeben (ähnlich Icon.PutDiskObject)
Parameter: a0 = DiskObject-Struktur, die geschrieben
werden soll.
a1 = Name der Datei, der die Icon-
Beschreibung zugeordnet werden soll.
Ergebnis: Erfolg ? 1 : 0
bei Erfolg wurde die DiskObject-Struktur freigegeben
(TRK_FreeDiskObject).
Freigabefunktion zu TRK_GetDiskObject,
TRK_GetDefDiskObject, TRK_GetDiskObjectNew
--------------------------------------------------------
TRK_PutDefDiskObject: Standard-Icon-Daten setzen und
danach freigeben (ähnlich Icon.PutDefDiskObject)
Parameter: a0 = DiskObject-Struktur, die gesetzt werden
soll.
Ergebnis: Erfolg ? 1 : 0
bei Erfolg wurde die DiskObject-Struktur freigegeben
(TRK_FreeDiskObject).
Freigabefunktion zu TRK_GetDefDiskObject
--------------------------------------------------------
TRK_FreeDiskObject: Icon-Daten freigeben
Originalfunktion: Icon.FreeDiskObject
Freigabefunktion zu TRK_GetDiskObject,
TRK_GetDefDiskObject, TRK_GetDiskObjectNew